{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# k近邻法（K-nearest neighbors）\n",
    "\n",
    "可用于分类和回归任务\n",
    "\n",
    "## 下面的示例：使用KNN完成鸢尾花分类任务"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(150, 4) (150,)\n",
      "Class labels: [0 1 2]\n",
      "(105, 2) (105,)\n"
     ]
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "from matplotlib.colors import ListedColormap\n",
    "\n",
    "from sklearn import datasets\n",
    "from sklearn.model_selection import train_test_split\n",
    "import numpy as np\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "print(iris['data'].shape, iris['target'].shape) # (150, 4) (150,)\n",
    "X = iris.data[:,[2,3]]\n",
    "y = iris.target\n",
    "print('Class labels:', np.unique(y))\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)\n",
    "print(X_train.shape, y_train.shape)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [
    "# 训练，并绘制分类决策边界：\n",
    "def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):\n",
    "     # setup marker generator and color map\n",
    "     markers = ('s', 'x', 'o', '^', 'v')\n",
    "     colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')\n",
    "     cmap = ListedColormap(colors[:len(np.unique(y))])\n",
    "\n",
    "     # plot the decision surface\n",
    "     x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n",
    "     x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n",
    "     xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),\n",
    "                            np.arange(x2_min, x2_max, resolution))\n",
    "     Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)\n",
    "     Z = Z.reshape(xx1.shape)\n",
    "     plt.contourf(xx1, xx2, Z, alpha=0.3, cmap=cmap)\n",
    "     plt.xlim(xx1.min(), xx1.max())\n",
    "     plt.ylim(xx2.min(), xx2.max())\n",
    "\n",
    "     for idx, cl in enumerate(np.unique(y)):\n",
    "         plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],\n",
    "         alpha=0.8, c=colors[idx],\n",
    "         marker=markers[idx], label=cl,\n",
    "         edgecolor='black')\n",
    "\n",
    "     # highlight test samples\n",
    "     if test_idx:\n",
    "         # plot all samples\n",
    "         X_test, y_test = X[test_idx, :], y[test_idx]\n",
    "         plt.scatter(X_test[:, 0], X_test[:, 1],\n",
    "                     c='', edgecolor='black', alpha=1.0,\n",
    "                     linewidth=1, marker='o',\n",
    "                     s=100, label='test set')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training accuracy: 0.9619047619047619\n",
      "Testing accuracy: 1.0\n"
     ]
    }
   ],
   "source": [
    "# 标准化数据\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "sc = StandardScaler()\n",
    "sc.fit(X_train)\n",
    "X_train_std = sc.transform(X_train)\n",
    "X_test_std = sc.transform(X_test)\n",
    "\n",
    "X_combined_std = np.vstack((X_train_std, X_test_std))\n",
    "y_combined = np.hstack((y_train, y_test))\n",
    "\n",
    "# 训练，k=5, 距离度量为\n",
    "knn = KNeighborsClassifier(n_neighbors=5, p=2, metric='minkowski')\n",
    "knn.fit(X_train_std, y_train)\n",
    "\n",
    "print('Training accuracy:', knn.score(X_train_std, y_train))\n",
    "print('Testing accuracy:', knn.score(X_test_std, y_test))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:32: MatplotlibDeprecationWarning: Using a string of single character colors as a color sequence is deprecated since 3.2 and will be removed two minor releases later. Use an explicit list instead.\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制决策边界\n",
    "plot_decision_regions(X_combined_std, y_combined, classifier=knn, test_idx=range(105,150))\n",
    "plt.xlabel('petal length [standardized]')\n",
    "plt.ylabel('petal width [standardized]')\n",
    "plt.legend(loc='upper left')\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}